Technical Q&A

Java 16 - Java をベースとしたコマンドラインインタフェースのアプリケーションを記述するには(1999 年 4 月 27 日)


Q: AppleScript からコマンドラインの Java アプリケーションを実行するとき、タイムアウトを起こさないようにする方法を教えてください。インタフェースコンポーネントがないので、MRJ に用意されている 'aete' は役に立ちません。コマンドラインクラス MyParser の用語説明を作成するよう要求すると、メソッドのない MyParser クラスが作成されます。つまり、mainメソッドに相当する「主たる」動詞が存在しないのです。

そこで JBindery にコマンドラインのパラメータを配置し、JBound アプリケーションを実行するようにしました。JBound の MyParser アプリケーションはうまく実行されて終了しましたが、呼び出し側の AppleScript に何も返されません。結果としてイベントがタイムアウトになります。この動作を修正するにはどうすればよいでしょうか。

 

A: MRJ のスクリプティングモデル(MRJ scripting model)は、通常の (スクリプティング対応の) Mac アプリケーションでスクリプティングを行う場合と非常によく似ています。まず、スクリプティング対応アプリケーションを実行し、スクリプティングコマンドを送ります。通常は JBound アプリケーションを作成し、それを起動して、そのアプリケーションのいずれかの AWT ベースのウィンドウを利用してスクリプトを記述します。

AWT ウィンドウを作成しないコマンドラインをベースとした Java アプリケーションを作成する場合は、アプリケーションは MRJ の標準的なスクリプティングモデルに準拠しないことになります。スクリプトでアプリケーションを利用するには、スクリプティングを利用できるようにいくつかの手順を追加する必要があります。

まず、スクリプティングコマンドを送るために Java のシェルアプリケーションを実行する必要があります。空の main() 関数がある小さなアプリケーションを作成するか、または既存の Java アプリケーションをシェルとして扱います。

次に、コマンドラインアプリケーションによって利用される main() を含む jar ファイルがクラスパスに存在していることを確認する必要があります。この jar ファイルがすでに「MRJClasses」フォルダに入っている場合は、何もする必要はありません。この jar ファイルが「MRJClasses」フォルダに入っていない場合は、次のスクリプトを使ってクラスパスに追加する必要があります。

tell
                  application "myJavaShell"
   start tool alias "HD:myJavaStuff:TrivialClass.jar" selecting null
                  end tell

これで main を起動できるようになります。

tell
                  application "myJavaShell"
   apply to class "com.xyz.TrivialClass" java method
"main" parameters { "alpha", "beta"}
                  end tell

しかし、クラスが void を返すように定義されているので、依然として結果は何も得られません。

static void
                  main(String args[]){...}

コンソールウィンドウの出力を得たい場合は、次のように記述します。

tell
                  application "myJavaShell"
    get text content of text area 1 of window 1
                  end tell

 


-- Michael Hopkins
Worldwide Developer Technical Support

Technical Q&As | Contents
Previous Question

To contact us, please use the Contact Us page.